package com.itheima.service;

import com.itheima.pojo.Book;
import com.itheima.pojo.Borrow;
import com.itheima.pojo.History;
import com.itheima.pojo.PageBean;
import org.apache.ibatis.annotations.Delete;
import org.apache.ibatis.annotations.Insert;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;


import java.util.List;

public interface BookService {
    /**
     * 查询所有书籍
     * @return
     */
    List<Book> selectAll() ;

    /**
     * 增加图书
     * @param book
     */
    boolean add(Book book);

    /**
     * 批量删除图书
     * @param ids
     */
    void deleteByIds(int[] ids);

    /**
     * 删除
     * @param id
     */
    void delete(int id);

    /**
     * 编辑图书
     * @param book
     */
    int update(Book book);

    /**
     * 分页查询
     * @param currentPage 当前页码
     * @param pageSize    每页展示条数
     * @return
     */
    PageBean<Book> selectByPage(int currentPage,int pageSize);

    /**
     * 分页条件查询
     * @param currentPage
     * @param pageSize
     * @param book
     * @return
     */
    PageBean<Book> selectByPageAndCondition(int currentPage,int pageSize,Book book);

    /**
     * 通过id查找图书
     * @param id
     * @return
     */
    Book selectById(int id);

    /**
     * 借书
     * @param borrow
     */
    void borrow(Borrow borrow);

    /**
     * 还书时根据用户名查询借书的信息
     * @param username
     * @return
     */
    List<Borrow> selectByUsername(String username);

    /**
     * 还书时把借书信息表的记录删除
     * @param id
     */
    void deleteBorrow(int id);

    /**
     * 还书时根据id获取对象
     * @param id
     * @return
     */
    Borrow getBook(int id);

    /**
     * 根据名字从库存查询图书
     * @param name
     * @return
     */
    Book selectByName(String name);

    /**
     * 根据名字归还图书到图书库存表
     * @param book
     */
    void huanShu(Book book);

    /**
     * 查询所有借书信息
     * @return
     */
    List<Borrow> selectFromBorrow();

    /**
     * 根据用户名删除借书记录
     * @return
     */
    int deleteUser(String username);

    /**
     * 借书历史记录
     * @param history
     * @return
     */
    boolean addHistory(History history);

    /**
     * 根据用户名删除用户借书的历史记录
     * @param username
     * @return
     */
    int deleteHistory(String username);
}
